package com.zkthink.ceres.pay.wechat.v3.entity.result.refunds;

import com.alibaba.fastjson.annotation.JSONField;
import com.zkthink.ceres.pay.wechat.v3.entity.request.refunds.Amount;
import com.zkthink.ceres.pay.wechat.v3.entity.result.BasePayResult;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

/**
 * <p>
 * 合并下单结果
 * </p>
 *
 * @author vivi.huang
 * @since 2020/5/17
 */
@Data
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@Accessors(chain = true)
public class QueryRefundsResult extends BasePayResult {

    private static final long serialVersionUID = 1960459269579244358L;

    /**
     * 退款渠道	channel	string(16)	否	ORIGINAL：原路退款
     * BALANCE：退回到余额
     * OTHER_BALANCE：原账户异常退到其他余额账户
     * OTHER_BANKCARD：原银行卡异常退到其他银行卡
     * 示例值： ORIGINAL
     */
    @JSONField(name = "channel")
    private String channel;

    /**
     * 退款入账账户	user_received_account	string(64)	否	取当前退款单的退款入账方。
     * 退回银行卡：{银行名称}{卡类型}{卡尾号}
     * 退回支付用户零钱：支付用户零钱
     * 退还商户：商户基本账户、商户结算银行账户
     * 退回支付用户零钱通：支付用户零钱通
     * 示例值： 招商银行信用卡0403
     */
    @JSONField(name = "user_received_account")
    private String userReceivedAccount;

    /**
     * 退款成功时间	success_time	string(64)	否	退款成功时间，遵循rfc3339标准格式，格式为YYYY-MM-DDTHH:mm:ss+TIMEZONE，YYYY-MM-DD表示年月日，T出现在字符串中，表示time元素的开头，HH:mm:ss表示时分秒，TIMEZONE表示时区（+08:00表示东八区时间，领先UTC 8小时，即北京时间）。例如：2015-05-20T13:29:35+08:00表示，北京时间2015年5月20日13点29分35秒。
     * 示例值： 2018-06-08T10:34:56+08:00
     */
    @JSONField(name = "success_time")
    private String successTime;


    /**
     * 退款状态	status	string(16)	是	退款状态，枚举值：
     * SUCCESS：退款成功
     * REFUNDCLOSE：退款关闭
     * PROCESSING：退款处理中
     * ABNORMAL：退款异常，退款到银行发现用户的卡作废或者冻结了，导致原路退款银行卡失败，可前往【服务商平台—>交易中心】，手动处理此笔退款
     * 示例值：SUCCESS
     */
    @JSONField(name = "status")
    private String status;

    /**
     * 退款金额信息	amount	object	是	订单退款金额信息
     */
    @JSONField(name = "amount")
    private Amount amountObj;

    /**
     * 营销详情	promotion_detail	array	否	优惠退款信息
     */
    @JSONField(name = "promotion_detail")
    private PromotionDetail promotionDetail;

}